package tp2;

import java.awt.Color;
import java.awt.Graphics;
import java.io.Serializable;
import javax.swing.JComponent;


/**
 * Définie le pion
 */
public class Pions extends JComponent implements Serializable, Jouable {
    Color couleur; // Couleur de la case
    Color couleurTemp; // Couleur temporaire pour la sélection du pion
    int proprio; // Propriétaire du pion
    Cases caseMere; // Référence vers la case mère
    private boolean superPions = false; // Indique si la case est un superPion

    /**
     * On contruit le pion
     * @param couleur La couleur du pion
     * @param caseMere Référence vers la case mère
     */
    public Pions(int couleur, Cases caseMere) {
        proprio = couleur;
        this.caseMere = caseMere;
        this.initColor();
    }

    /**
     * Permet de setter si est un superPion ou non
     * @param superPions Oui ou Non est un superPion
     */
    public void setSuperPions(boolean superPions) {
        if(this.isVisible())
            this.superPions = superPions;
    }

    /**
     * Pour obtenir si la case est un superPion
     * @return (boolean) Si la case est un superPion
     */
    public boolean isSuperPions() {
        return superPions;
    }

    /**
     * Réinitialise le pion
     */
    public void clear() {
        setProprio(0);
        superPions = false;
        setVisible(false);
    }

    /**
     * On définie la couleur en fonction du propriétaire du pion
     */
    private void initColor() {
        if(!this.isSelected()) {
            if (proprio == 1) {
                couleur = Color.BLUE;
            } else if (proprio == 2) {
                couleur = Color.WHITE;
            } else if (proprio == 3) {
                couleur = Color.RED;
            } else if (proprio == 4){
                couleur = Color.BLACK;
            }
        } 
    }

    /**
     * Permet de savoir si la case actuelle est sélectionnée
     * @return Si cette case est sélectionné
     */
    public boolean isSelected() {
        return this.caseMere.getJeu().getCaseSelect() == this.caseMere;
    }

    /**
     * Permet de définier le propriétaire de ce pion
     * @param proprio Le no du proprio
     */
    public void setProprio(int proprio) {
        this.proprio = proprio;
        this.revalidate();
        this.repaint();
    }

    /**
     * Permet d'obtenir le propriétaire actuel du pion
     * @return (int) Le no du proprio du pion
     */
    public int getProprio() {
        return this.proprio;
    }

    /**
     * Action appellé lorsqu'on clique sur la case mère du pion
     */
    public void toggleClick() {
        if(this.isVisible()) {
            if(couleur == Color.MAGENTA) {
                this.couleur = this.couleurTemp;
            } else {
                this.couleurTemp = this.couleur;
                this.couleur = Color.MAGENTA;
            }
            this.repaint();
        }
    }

    /*
     * On dessine le pion!!
     */
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        initColor();
        int coefficient = 7;
        g.setColor(couleur);
        g.fillOval(this.getWidth()/coefficient, this.getHeight()/coefficient, this.getWidth()-2*this.getWidth()/coefficient,this.getHeight()-2*this.getHeight()/coefficient);

        coefficient = 4;
        if(isSuperPions()) {
            g.setColor(Color.GRAY);
            g.fillOval(this.getWidth()/coefficient, this.getHeight()/coefficient, this.getWidth()-2*this.getWidth()/coefficient,this.getHeight()-2*this.getHeight()/coefficient);
        }
    }


    // Code inutile mais necessaire pour les points :)
    public boolean estFixe() {  return true; } public boolean estClique(boolean clique) { return clique; }
}
